//#include <iostream>
//using namespace std;
//
//const int N = 10010;
//int a[N], b[N];
//int n;
//int cnt;
//
//bool fun(int i)
//{
//	a[1] = i;
//	for(int j = 2; j <= n; j++)
//	{
//		a[j] = b[j - 1] - a[j - 1] - a[j - 2];
//		if(a[j] > 1 || a[j] < 0) 
//		{
//			return false;
//		}
//	}
//	
//	if(b[n] != a[n-1]+a[n])
//	{
//		return false;
//	}
//
//	return true;
//}
//
//int main()
//{
//	cin >> n;
//	for(int i = 1; i <= n; i++)
//	{
//		cin >> b[i];
//	}
//	
//	for(int i = 0; i <= 1; i++)
//	{
//		if(fun(i)) cnt++;
//	}
//	
//	cout << cnt << endl;
//	return 0;
//}

//#include <iostream>
//#include <cstring>
//using namespace std;
//
//const int N = 10;
//
//int a[N], t[N];
//int n = 5;
//
//int calc(int num)
//{
//	int count = 0;
//	while(num)
//	{
//		count++;
//		num &= (num - 1);
//	}
//	return count;
//}
//
//int main()
//{
//	int T = 0;
//	cin >> T;
//	
//	while(T--)
//	{
//		memset(a, 0, sizeof(a));
//		int ret = 999999999;
//		
//		for(int i = 0; i < n; i++)
//		{
//			for(int j = 0; j < n; j++)
//			{
//				char ch;
//				cin >> ch;
//				if(ch == '0') a[i] |= (1 << j);
//			}
//		}
//		
//		for(int st = 0; st < (1 << n); st++)
//		{
//			memcpy(t, a, sizeof(a));
//			int push = st;
//			int count = 0;
//			for(int i = 0; i < n; i++)
//			{
//				count += calc(push);
//				t[i] = t[i] ^ push ^ (push << 1) ^ (push >> 1);
//				t[i] &= (1 << n) - 1;
//				
//				t[i + 1] ^= push;
//				
//				push = t[i];
//			}
//			
//			if(t[n - 1] == 0) ret = min(ret, count);
//		}
//		
//		cout << (ret > 6 ? -1 : ret) << endl;
//	}
//	return 0;
//}

//#include <iostream>
//#include <cmath>
//using namespace std;
//
//int main()
//{
//	int n; cin >> n;
//	for(int i = n; i >= 0; i--)
//	{
//		int num; cin >> num;
//		if(num == 0) continue;
//		else if(num < 0) cout <<'-';
//		else if(num > 0 && i != n) cout << '+';
//		
//		num = abs(num);
//		if(num != 1) cout << num;
//		
//		if(i == 1) cout << "x";
//		else if(i == 0)
//		{
//			if(num == 1) cout << num;
//		}
//		else
//		{
//			cout << "x^" << i;
//		}
//	}	
//	return 0;
// } 

#include <iostream>
using namespace std;

const int N = 15;
int a[N][N];

int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};

int main()
{
	int n; cin >> n;
	int x = 1, y = 1;
	int pos = 0;
	
	for(int i = 1; i <= n * n; i++)
	{
		a[x][y] = i;
		x += dx[pos];
		y += dy[pos];
		
		if(x < 1 || y < 1 || x > n || y > n || (a[x][y] != 0))
		{
			x -= dx[pos];
			y -= dy[pos];
			
			pos = (pos + 1) % 4;
			x += dx[pos];
			y += dy[pos];
		}
	}
	
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= n; j++)
		{
			printf("%3d", a[i][j]);
		}
		cout << endl;
	}
	return 0;
}
























